package com.fd.spring.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

// 定义一个动态代理处理器,要实现反射中的InvocationHandler
public class UserHandler implements InvocationHandler {
    //因为方法是依赖于对象而执行,仅仅有方法是不能执行的,所以要定义一个对象为真正要执行方法的对象.
    private Object target;

    //为了让被执行的对象一定传入,这里采用构造器传入
    public UserHandler(Object target) {
        this.target = target;
    }

    /**
     *
     * @param proxy 是表示动态代理类
     * @param method 表示正在调用的方法
     * @param args 表示当前方法调用时候的参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("在方法执行之前");
        //下面是反射中执行一个方法(未知)的语法: 方法名.(被执行对象,传入参数)
        Object invoke = method.invoke(target, args);
        System.out.println("在方法执行之后");
        return invoke;
    }
}
